package com.xszx.dao;

import com.xszx.entity.Position;
import com.xszx.entity.Type;
import com.xszx.entity.Warehouse;
import com.xszx.entity.WarehouseRegionInfo;
import com.xszx.config.PageRequest;
import com.xszx.entity.*;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface WarehouseDao {

    public List<Warehouse> WarehouseList(PageRequest pageRequest);

    public int delWarehouseByNumber(String number);

    List<WarehouseRegionInfo> GetWarehouseInfoByNumber(String number);

    //增加仓库
    int addWarehouse(Warehouse warehouse);

    //回显仓库类型（增加的时候选仓库类型）

    List<Type> getWarehouseType();

    //获得仓库的信息
    Warehouse getWarehouseByNumber(String number);

    //获得仓库类型的id，根据类型的名字
    String getWarehousseTypeIdByTypeName(String t_name);

    List<Type> getRegionType();

    //增加仓库的区域信息
    int addRegionByWarehouseNumber(WarehouseRegionInfo warehouseRegionInfo);

    //根据仓库名获得仓库的id（添加区域的时候要用）
    String getWidByWname(String wname);

    //根据区域类型的名字获得区域类型的id
    String getRtypeIdByTname(String typeName);

    //还需要更新实际可用面积,通过区域的编号来锁定去更新哪条
    void updateState(String number);

    //判断区域内的货物是否已出库
    List<Goods> IsDelRegionByNumber(Integer rid);

    void delRegionByNumber(Integer rid);

    //根据类型获得仓库列表
    List<Warehouse> getWarehousesByType(String gtype);

    //根据仓库的id获取区域信息
    List<WarehouseRegionInfo> getRegionByWid(String wid);

    //改变仓库状态
    void updateWarehouseState(@Param("wid") Integer wid,@Param("state") String state);

    void updateWarehouse(Warehouse warehouse);

    MonthCount getWarehousearea();

    void updateRegion(WarehouseRegionInfo warehouseRegionInfo);  //修改仓库区域
    //查询区域类型
    List<Position> getpositionList(Integer rId);
    //查看区域类型
    Position getPositionById(int positionId);
    //通过仓库id去查询仓库编号
    String getWarehouseByWid(String wid);
    //根据区域id查询区域类型名
    String getRtype(String  rid);

    String getRtypeN(@Param("rid") String rid,@Param("id") Integer id);
    String getRtypeName(String typeName);

    void updateRegion1(WarehouseRegionInfo warehouseRegionInfo);

//    增加仓位
    void addPosition(Position position);

//    修改仓位
    void updatePosition(Position position);

//    删除仓位
    void deletePosition(Integer id);

    // 按年月统计货物数量
    List<MonthCount> countByYearMonth();


}
